//@author wtfumlomglol
package amm.Graphic;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintStream;
import java.util.ArrayList;

//naplózó osztály az üzenetek, térképek és IO kezelésére
public class Logger {
    //üzenetek
    private ArrayList<String> messages = new ArrayList<String>();
    //térkép szerkezet
    private ArrayList<String> roadMap = new ArrayList<String>();
    //térkép
    private ArrayList<String> map = new ArrayList<String>();

    //új üzenet felvétele
    public void addMessage(String msg) {
        messages.add(msg);
        System.out.println(msg);
    }

    //üzenetek törlése
    public void clearLog() {
        messages.clear();
    }

    //üzenetek standard outputra küldése
    public void printLog() {
        for (String msg : messages) {
            System.out.println(msg);
        }
    }

    //log kiírása fájlba, majd a log törlése
    public void printLogToFile(String target) {
        FileOutputStream out;
        try {
            out = new FileOutputStream(System.getProperty("user.dir") + System.getProperty("file.separator") + target);
        } catch (FileNotFoundException e) {
            File f = new File(System.getProperty("user.dir") + System.getProperty("file.separator") + target);
            try {
                f.createNewFile();
                out = new FileOutputStream(System.getProperty("user.dir") + System.getProperty("file.separator") + target);
            } catch (IOException io) {
                addMessage("Error: WriteError");
                return;
            }
        }
        PrintStream p = new PrintStream(out);
        for (String msg : messages) {
            p.println(msg);
        }
        p.close();
        clearLog();
    }

    // térkép nyomtatása, a térkép felkerül a logba is
    public void printMap() {
        for (String mapLine : map) {
            addMessage(mapLine);
        }
    }

    //térkép mentése fájlba
    public void printMapToFile(String target) {
        FileOutputStream out;
        try {
            out = new FileOutputStream(System.getProperty("user.dir") + System.getProperty("file.separator") + target);
        } catch (FileNotFoundException e) {
            File f = new File(System.getProperty("user.dir") + System.getProperty("file.separator") + target);
            try {
                f.createNewFile();
                out = new FileOutputStream(System.getProperty("user.dir") + System.getProperty("file.separator") + target);
            } catch (IOException io) {
                addMessage("Error: WriteError");
                return;
            }
        }
        PrintStream p = new PrintStream(out);
        for (String mapLine : map) {
            p.println(mapLine);
        }
        p.close();
    }

    //térkép mentése
    public void setMap(ArrayList<String> newMap) {
        map = newMap;
    }

    //térkép szerkezet mentése
    public void setRoadMap(ArrayList<String> newMap) {
        roadMap = newMap;
    }

    //térképet adja vissza
    public ArrayList<String> getMap() {
        return roadMap;
    }
}
